using System;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using Microsoft.Win32;

namespace SoftManager
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            // 设置开机自动启动
            SetAutoStart();

            // 检查是否需要更新
            if (CheckForUpdateBeforeStart())
            {
                // 如果有更新并已启动更新程序，则直接退出当前程序
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        /// <summary>
        /// 启动前检查更新
        /// </summary>
        /// <returns>是否启动了更新程序</returns>
        static bool CheckForUpdateBeforeStart()
        {
            try
            {
                // 获取当前版本
                string currentVersion = "1.0.3";
                
                // 创建自动更新帮助类实例
                //string updateUrl = "http://10.3.255.92:16335";
                string updateUrl = "https://www.lzetyy.com:16335";
                
                AutoUpdateHelper updateHelper = new AutoUpdateHelper(updateUrl, "SoftManager", currentVersion, null);
                
                // 检查更新，如果有更新则自动执行更新
                return updateHelper.CheckUpdateAndAutoInstallBeforeStart();
            }
            catch (Exception ex)
            {
                // 静默处理错误，不显示给用户
                Console.WriteLine($"启动前检查更新失败：{ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 设置开机自动启动
        /// </summary>
        public static void SetAutoStart()
        {
            try
            {
                // 获取应用程序的路径
                string appPath = Application.ExecutablePath;
                string appName = Path.GetFileNameWithoutExtension(appPath);

                // 打开注册表项
                RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

                if (reg == null)
                {
                    // 如果注册表项不存在，则创建
                    reg = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
                }

                // 检查是否已经设置了开机启动
                object value = reg.GetValue(appName);
                if (value == null || !value.ToString().Equals(appPath))
                {
                    // 设置开机启动
                    reg.SetValue(appName, appPath);
                }

                // 关闭注册表项
                reg.Close();
            }
            catch (Exception ex)
            {
                // 静默处理错误，不显示给用户
                Console.WriteLine($"设置开机自动启动失败：{ex.Message}");
            }
        }

        /// <summary>
        /// 取消开机自动启动
        /// </summary>
        public static void UnsetAutoStart()
        {
            try
            {
                // 获取应用程序的路径
                string appPath = Application.ExecutablePath;
                string appName = Path.GetFileNameWithoutExtension(appPath);

                // 打开注册表项
                RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

                if (reg != null)
                {
                    // 检查是否已经设置了开机启动
                    object value = reg.GetValue(appName);
                    if (value != null && value.ToString().Equals(appPath))
                    {
                        // 删除开机启动项
                        reg.DeleteValue(appName);
                    }

                    // 关闭注册表项
                    reg.Close();
                }
            }
            catch (Exception ex)
            {
                // 静默处理错误，不显示给用户
                Console.WriteLine($"取消开机自动启动失败：{ex.Message}");
            }
        }

        /// <summary>
        /// 检查是否已设置开机自动启动
        /// </summary>
        /// <returns>是否已设置开机自动启动</returns>
        public static bool IsAutoStartEnabled()
        {
            try
            {
                // 获取应用程序的路径
                string appPath = Application.ExecutablePath;
                string appName = Path.GetFileNameWithoutExtension(appPath);

                // 打开注册表项
                RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

                if (reg != null)
                {
                    // 检查是否已经设置了开机启动
                    object value = reg.GetValue(appName);
                    bool result = (value != null && value.ToString().Equals(appPath));

                    // 关闭注册表项
                    reg.Close();

                    return result;
                }

                return false;
            }
            catch (Exception ex)
            {
                // 静默处理错误，不显示给用户
                Console.WriteLine($"检查开机自动启动状态失败：{ex.Message}");
                return false;
            }
        }
    }
}